#include <iostream>

using std::cout;
using std::endl;
enum FourierPrimes {fp1=2, fp2=7, fp3=13};

enum {val1=1, val32=32};

#define Variables(x, y)   char (x)[] = (y)
// char Variables

// {char (x)=('3');}
Variables(x,"x,y");

template<FourierPrimes p> class ZpRing {
		public:
		 FourierPrimes ch(){
			return p;
		}
};


FourierPrimes getNext(int i){
	// for (FourierPrimes fp=fp1; fp <= fp3; fp+=1)
	//		if (fp>i) return fp;
	return fp3;

}


int main(){
	
		cout << val32 << endl;
		cout << x << endl;
		int i=10;
		FourierPrimes fp=getNext(i);
		FourierPrimes fp0=FourierPrimes(10); // legal, but not error prone
		
		ZpRing<fp2> Z2;
	//	ZpRing<fp> Z3;

		cout << Z2.ch() << endl;
	//	cout << Z3.ch() << endl;
		cout << fp0 << endl;

		return 0;
	
}
